8 任务编号:C4-008“明细”功能实现

8.1 任务描述


置任务:C4-007

业务模块:“明细“功能

实现“明细“功能。

任务类型:按步骤操作

8.2 详细实现步骤

明细功能主要包括收入的增加和显示,支出的增加和显示等,主要代码均在MainActivity中。

下图是“明细”界面,收入明细使用红色显示,支出使用绿色显示。

图 21 “明细”运行界面

8.2.1 初始化收入类型

收入类型数据使用spinner组件来实现,并且需要在程序运行初对其进行初始化。具体方法是从数据库读取数据后,通过setAdapter方法绑定到spinner组件。

private void initSpinnerEarningType(){
    View view=viewList.get(0);
    Spinner spinner=(Spinner)view.findViewById(R.id.spinnerEarningType);
    List<String> items=accountDatabase.SelectEarningTypeStringsAll();

    ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,items);
    spinner.setAdapter(adapter);

    accountDatabase.DeleteEarningAll();
}

8.2.2 初始化支出类型

同收入类型初始化类似,也是从数据库读取数据后,在spinner组件中显示。

private void initSpinnerExpenditureType(){
    View view=viewList.get(0);
    Spinner spinner=(Spinner)view.findViewById(R.id.spinnerExpenditureType);
    List<String> items=accountDatabase.SelectExpenditureTypeStringsAll();

    ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,items);
    spinner.setAdapter(adapter);
}

8.2.3 初始化增加收入和增加支出按钮

当用户单击增加收入或增加支出按钮时,从界面上读取数据,然后把数据放入到数据库中。

private void initDetailsButton(){

    View view=viewList.get(0);
    final Spinner spinnerEarning=(Spinner)view.findViewById(R.id.spinnerEarningType);
    final EditText textEarning=(EditText)view.findViewById(R.id.txtEarningAmount);

    Button buttonNewEarning=(Button)view.findViewById(R.id.buttonNewEarning);
    buttonNewEarning.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String type=spinnerEarning.getSelectedItem().toString();
            String account=textEarning.getText().toString();
            accountDatabase.InsertEarning(type,account);

            refreshEarningLiseView();
            initOwnView();
        }
    });

    final Spinner spinnerExpenditure=(Spinner)view.findViewById(R.id.spinnerExpenditureType);
    final EditText textExpenditure=(EditText)view.findViewById(R.id.txtExpenditureAmount);

    Button buttonNewExpenditure=(Button)view.findViewById(R.id.buttonNewExpenditure);
    buttonNewExpenditure.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String type=spinnerExpenditure.getSelectedItem().toString();
            String account=textExpenditure.getText().toString();
            accountDatabase.InsertExpenditure(type,account);

            refreshExpenditureLiseView();
            initOwnView();
        }
    });

}

8.2.4 显示收入明细

明细使用ListView组件显示,为了显示更加清楚,增加一个列表项的布局文件。

FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="cn.edu.bistu.cs.se.accountbook.MainActivity"
>


<
LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left|top"
        android:background="#FF4500"
>


<
TextView android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/typeEarningName"/
>
<
TextView android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/transactionEarningDate"/
>
<
TextView android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/accountEarning"/
>


<
/LinearLayout
>


<
/FrameLayout
>

当从数据库中读取数据后,使用ListView显示出来。

private void refreshEarningLiseView(){
    View view=viewList.get(0);
    ArrayList
<
Map
<
String, String
>
>
 items = accountDatabase.getAllEarnings();


    SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.layout_earning_item_details,
            new String[]{Earning.TableAttr.COLUMN_FK_TYPE, Earning.TableAttr.COLUMN_ACCOUNT_DATE,Earning.TableAttr.COLUMN_AMOUNT},
            new int[]{R.id.typeEarningName, R.id.transactionEarningDate,R.id.accountEarning});


    ListView listView=view.findViewById(R.id.ListEarnings);
    listView.setAdapter(adapter);
}

8.2.5 显示支出明细

同前类似,定义列表项显示布局:

<
FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="cn.edu.bistu.cs.se.accountbook.MainActivity"
>


<
LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left|top"
        android:background="#00FF00"
>


<
TextView android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/typeExpenditureName"/
>
<
TextView android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/transactionExpenditureDate"/
>
<
TextView android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/accountExpenditure"/
>


<
/LinearLayout
>






<
/FrameLayout
>

然后从数据库中读取数据后,在列表中显示出来。

private void refreshExpenditureLiseView(){
    View view=viewList.get(0);
    ArrayList
<
Map
<
String, String
>
>
 items = accountDatabase.getAllExpenditures();


    SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.layout_expenditure_item_details,
            new String[]{Expenditure.TableAttr.COLUMN_FK_TYPE, Expenditure.TableAttr.COLUMN_ACCOUNT_DATE,Expenditure.TableAttr.COLUMN_AMOUNT},
            new int[]{R.id.typeExpenditureName, R.id.transactionExpenditureDate,R.id.accountExpenditure});


    ListView listView=view.findViewById(R.id.ListExpenditures);
    listView.setAdapter(adapter);
}

results matching ""

    No results matching ""